package Leetcode;

import java.util.Arrays;

/**
 * @Author piper
 * @Date 2019/10/24 2:58 下午
 */
public class 力扣88_合并两个有序数组 {

    /**
     * 官网 合并后排序
     */
    static void merge1(int[] nums1, int m, int[] nums2, int n) {
        System.arraycopy(nums2, 0, nums1, m, n);
        Arrays.sort(nums1);
    }

    /**
     * 双指针 从前往后
     */
    static void merge2(int[] nums1, int m, int[] nums2, int n) {
        int[] clone = nums1.clone();
        int i = 0, j = 0, c = 0;
        while (i < m && j < n) {
            nums1[c++] = clone[i] < nums2[j] ? clone[i++] : nums2[j++];
        }
        while (i < m) {
            nums1[c++] = clone[i++];
        }
        while (j < n) {
            nums1[c++] = nums2[j++];
        }
    }

    /**
     * 双指针 从后往前
     */
    static void merge3(int[] nums1, int m, int[] nums2, int n) {
        m = m - 1;
        n = n - 1;
        int i = nums1.length - 1;
        while (m != 0 && n != 0) {
            nums1[i--] = nums1[m] > nums2[n] ? nums1[m--] : nums2[n--];
        }
        while (m != 0) {
            nums1[i--] = nums1[m--];
        }
        while (n != 0) {
            nums1[i--] = nums2[n--];
        }
    }

    public static void main(String[] args) {
        int[] num1 = {-1, 0, 0, 3, 3, 3, 0, 0, 0};
        int[] num2 = {1, 2, 2};
        merge3(num1, 6, num2, 3);
        for (int i : num1) {
            System.out.println(i);
        }
    }
}
